package cn.lili.modules.search.entity.enums;

/**
 * 搜索枚举
 */
public enum SearchEnum {


    //terms是在针对一个字段包含多个值的时候使用。
    //term：where city = 北京；
    //terms：where city = 北京 or id = ？or name = ？

    //terms和term的查询机制是一样的，都不会将指定的查询关键字进行分词，直接去分词库中匹配，找到相应文档内容。
    //QueryBuilders.termQuery("province","北京")
    TERM,
    //QueryBuilders.termsQuery("province","北京","山西")
    TERMS,


    //match查询属于高级查询，他会根据你查询的字段类型不一样，采用不同的查询方式,更加灵活多变

    //查询的是日期或者是数值的话，他会将你基于的字符串查询内容转换为日期或者数值对待。
    //如果查询的内容是一个不能被分词的内容（keyword），match查询不会对你指定的查询关键字进行分词。
    //如果查询的内容时一个可以被分词的内容（text），match会将你指定的查询内容根据一定的方式去分词，去分词库中匹配指定的内容。
    //match查询，实际底层就是多个term查询，将多个term查询的结果给你封装到了一起而已。

    //针对一个字段进行筛选 QueryBuilders.matchQuery("smsContent","收货安装")
    MATCH_FIELD,

    //针对一个字段进行筛选，且关系 QueryBuilders.matchQuery("smsContent","中国 健康").operator(Operator.AND) 字段中有 “中国” 并且有 “健康”
    MATCH_FIELD_AND,

    //针对一个字段进行筛选，或关系 QueryBuilders.matchQuery("smsContent","中国 健康").operator(Operator.OR) 字段中有 “中国” 或者 “健康”
    MATCH_FIELD_OR,

    //针对多个字段进行筛选，多字段对应同一个文字。QueryBuilders.multiMatchQuery("北京","province","smsContent")  多字段中有 “北京”
    MATCH_MULTI,

    //PS：prefix，fuzzy，wildcard和regexp查询效率相对比较低，要求效率比较高时，避免去使用

    //前缀查询，可以通过一个关键字去指定一个Field的前缀，从而查询到指定的文档, QueryBuilders.prefixQuery("corpName","前缀词")
    PREFIX,

    //模糊查询，我们输入字符的大概，ES就可以去根据输入的内容大概去匹配一下结果，可指定前几个字符必须匹配 QueryBuilders.fuzzyQuery("corpName","大概内容").prefixLength(2)
    FUZZY,

    //通配符查询，支持*和?，*表示任意字符，?表示任意一个字符 QueryBuilders.wildcardQuery("corpName","中国*")
    WILDCARD,


    //正则表达式查询 通过你编写的正则表达式去匹配内容 QueryBuilders.regexpQuery("mobile","180[0-9]{8}")
    REGEXP,

    //范围查询，只针对数值类型，gt：>      gte：>=     lt：<     lte：<=
    // 对某一个Field进行大于或者小于的范围指定 QueryBuilders.rangeQuery("fee").lte(10).gte(5)
    RANGE_GT,
    RANGE_GTE,
    RANGE_LT,
    RANGE_LTE,



}
